// 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
function generatePage() {

    // 1.获取分页数据
    var pageInfo = getPageInfoRemote();

    // 2.填充表格
    fillTableBody(pageInfo);

}

// 远程访问服务器端程序获取pageInfo数据
function getPageInfoRemote() {

    // 发送ajax请求获取数据
    var ajaxResult = $.ajax({
        url:"role/get/page/info.json",
        type:"post",
        data:{
            pageNum:window.pageNum,
            pageSize:window.pageSize,
            keyword:window.keyword
        },
        async:false,
        dataType:"json"
    });

    console.log(ajaxResult);

    // 获取当前响应状态码
    var statusCode = ajaxResult.status;

    // 如果当前响应状态码不是200,说明发生了错误或其他意外情况，显示提示消息，让当前函数停止执行
    if(statusCode != 200){
        layer.msg("失败！响应状态码="+statusCode+"  说明信息="+ajaxResult.statusText);
        return null;
    }

    // 如果响应状态码是 200 ，说明请求处理成功，获取 pageInfo
    var resultEntity = ajaxResult.responseJSON;

    // 从 resultEntity 中获取 result 属性
    var result = resultEntity.result;

    // 判断 result 是否成功
    if(result == "FAILED"){
        layer.msg(resultEntity.message);
        return null;
    }

    // 确认 result 为成功后获取 pageInfo
    var pageInfo = resultEntity.data;

    // 返回 pageInfo
    return pageInfo;

}

// 填充表格
function fillTableBody(pageInfo) {

    // 清除tbody中的旧的内容
    $("#rolePageBody").empty();

    $("#Pagination").empty();

    // 判断pageInfo对象是否有效
    if(pageInfo == null || pageInfo == undefined  || pageInfo.list == null || pageInfo.list.length == 0){
        $("#rolePageBody").append("<tr><td colspan='4' align='center'>抱歉！没有查询到您搜索的数据！</td></tr>>");
        return ;
    }

    // 使用 pageInfo 的 list 属性填充 tbody
    for(var i = 0;i<pageInfo.list.length;i++){
        var role = pageInfo.list[i];
        var roleId = role.id;
        var roleName = role.name;

        var numberTd = "<td>"+(i+1)+"</td>>";
        var checkboxTd = "<td><input id='"+roleId+"' class='itemBox' type='checkbox'></td>";
        var roleNameTd = "<td>"+roleName+"</td>>";

        var checkBtn = "<button   id='"+roleId+"' type='button'   class='btn   btn-success   btn-xs checkBtn'><i   class=' glyphicon glyphicon-check'></i></button>";
        var pencilBtn = "<button  id='"+roleId+"' type='button'   class='btn   btn-primary   btn-xs pencilBtn'><i   class=' glyphicon glyphicon-pencil'></i></button>";
        var removeBtn = "<button  id='"+roleId+"' type='button'   class='btn   btn-danger   btn-xs removeBtn'><i   class=' glyphicon glyphicon-remove'></i></button>";

        var buttonTd =  "<td>"+checkBtn+" "+pencilBtn+" "+removeBtn+"</td>";

        var tr = "<tr>"+numberTd+checkboxTd+roleNameTd+buttonTd+"</tr>>";

        $("#rolePageBody").append(tr);

    }

    //  生成分页导航条
    generateNavigator(pageInfo);

}

// 生成分页页码导航条
function generateNavigator(pageInfo) {

    //  获取总记录数
    var totalRecord = pageInfo.total;
    // 声明相关属性
    var properties = {
        num_edge_entries: 3, // 边缘页数
        num_display_entries: 5, // 主体页数
        callback:paginationCallBack,// 用户点击“翻页”按钮之后 执行翻页操作的回调函数
        current_page: pageInfo.pageNum-1, // 当前页，pageNum 从 1 开始， 必须-1 后才可以赋值
        prev_text: "上一页",
        next_text: "下一页",
        items_per_page:pageInfo.pageSize// 每页显示几项
    };
    // 调用 pagination()函数
    $("#Pagination").pagination(totalRecord,properties);


}

// 翻页时的回调函数
function paginationCallBack(pageIndex, jQuery) {

    // 修改window对象的全局变量pageNum属性
    window.pageNum = pageIndex + 1;
    // 调用分页函数
    generatePage();
    // 取消页码超链接的默认行为
    return false;

}

// 声明专门的函数显示确认模态框
function showConfirmModal(roleArray) {

    // 打开模态框
    $("#confirmModal").modal("show");

    // 清除旧的数据
    $("#roleNameDiv").empty();

    // 在全局变量范围创建数组用来存放角色id
    window.roleIdArray = [];

    // 遍历显示roleArray
    for(var i = 0;i<roleArray.length;i++){

        var role = roleArray[i];
        var roleName = role.roleName;
        $("#roleNameDiv").append(roleName+"<br/>");

        var roleId = role.roleId;

        // 调用数组对象的push（）方法存入新元素
        window.roleIdArray.push(roleId);

    }

}

// 声明专门的函数用来在分配 Auth 的模态框中显示 Auth 的树形结构数据
function fillAuthTree() {

    // 1.发送 Ajax 请求查询全部的Auth数据
    var ajaxReturn = $.ajax({
        url:"assign/get/all/auth.json",
        type:"post",
        dataType: "json",
        async: false
    });

    // 2.从响应结果中获取 Auth 的 JSON 数据
    if(ajaxReturn.status != 200){
        layer.msg("请求处理出错！响应状态码是："+ajaxReturn.status+"说明是："+ajaxReturn.statusText);
        return ;
    }
    // 从服务器端查询到的 list 不需要组装成树形结构，这里我们交给 zTree 去组装
    var authList = ajaxReturn.responseJSON.data;

    // 3.准备对 zTree 进行设置的 JSON 对象
    var setting = {
        data:{
            simpleData: {
                enable:true,
                pIdKey:"categoryId"
            },
            key:{
                name:"title"
            }
        },
        check:{
            enable:true
        }
    };

    // 4.生成树形结构
    $.fn.zTree.init($("#authTreeDemo"),setting,authList);
    var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
    // 调用 zTreeObj 对象的方法，把节点展开
    zTreeObj.expandAll(true);

    // 5.查询已分配的 Auth 的 id 组成的数组
    ajaxReturn = $.ajax({
        url:"assign/get/assigned/auth/id/by/role/id.json",
        type:"post",
        data:{
            roleId:window.id
        },
        dataType:"json",
        async:false
    });

    if(ajaxReturn.status != 200){
        layer.msg("请求处理出错！响应状态码是："+ajaxReturn.status+"说明是："+ajaxReturn.statusText);
        return ;
    }

    // 6.从响应结果中获取 authIdArray
    var authIdArray = ajaxReturn.responseJSON.data;

    // 7.根据 authIdArray 把树形结构中对应的节点勾选上
    for(var i = 0;i<authIdArray.length;i++){

        var authId = authIdArray[i];
        // 根据 id 查询树形结构中对应的节点
        var treeNode = zTreeObj.getNodeByParam("id",authId);
        //  checked 设置为 true 表示节点勾选
        var checked = true;
        // 不联动
        var checkTypeFlag = false;
        //执行
        zTreeObj.checkNode(treeNode,checked,checkTypeFlag);

    }


}